﻿using System;
using System.Text.RegularExpressions;

namespace CallCenter.Common
{
    /// <summary>
    /// 电话号码格式合法性判断
    /// </summary>
    public class PhoneValidator
    {
        /// <summary>
        /// 验证中国大陆手机号（11位，以1开头）
        /// 支持最新号段：13/14/15/16/17/18/19
        /// </summary>
        public static bool IsValidMobile(string phone)
        {
            // 正则表达式解析：
            // ^1          以1开头
            // [3-9]       第二位为3-9
            // \d{9}$      后续9位数字
            const string pattern = @"^1[3-9]\d{9}$";
            return Regex.IsMatch(phone, pattern);
        }

        /// <summary>
        /// 验证固定电话号码（支持带区号、分机号）
        /// 示例：010-12345678 或 0535-1234567 或 01012345678 或 (010)12345678
        /// </summary>
        public static bool IsValidLandline(string phone)
        {
            // 正则表达式解析：
            // (^$\d{3,4}$|\d{3,4}-?)  区号（3-4位数字），可带括号或短横线
            // \d{7,8}                   主号码（7-8位数字）
            // (-\d{1,6})?$              可选分机号（1-6位数字）
            const string pattern = @"^($\d{3,4}$|\d{3,4}-?)?\d{7,8}(-\d{1,6})?$";
            return Regex.IsMatch(phone, pattern);
        }

        /// <summary>
        /// 综合验证（手机号或固定电话）
        /// </summary>
        public static bool IsValidPhone(string phone)
        {
            // 移除所有空格（兼容带空格的输入）
            var cleanPhone = phone.Replace(" ", "");
            return IsValidMobile(cleanPhone) || IsValidLandline(cleanPhone);
        }

        // 示例用法
        public static void Test()
        {
            // 手机号验证测试
            Console.WriteLine(IsValidMobile("13812345678"));  // True
            Console.WriteLine(IsValidMobile("12345678901"));  // False（第二位错误）
            Console.WriteLine(IsValidMobile("1381234567a"));  // False（包含字母）

            // 固定电话验证测试
            Console.WriteLine(IsValidLandline("010-12345678"));     // True
            Console.WriteLine(IsValidLandline("05351234567"));      // True
            Console.WriteLine(IsValidLandline("(0755)12345678"));   // True
            Console.WriteLine(IsValidLandline("12345-678901"));     // False（区号错误）

            // 综合验证测试
            Console.WriteLine(IsValidPhone(" 138 1234 5678 "));     // True（带空格）
            Console.WriteLine(IsValidPhone("010-1234-5678"));       // True（带分机号）
        }
    }
}
